﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using DomainDriver.DomainModeling.GenericUnitTesting;
using AutomotivePricingModel.Dealers;

namespace AutomotivePricingModel.UnitTests.DomainObjects
{
    [TestFixture]
    public class DealerTests : DomainObjectTestFixture<Guid, Dealer>
    {
        protected override Dealer CreateUniqueDomainObject()
        {
            return new Dealer();
        }

        protected override ICollection<DomainObjectModifier<Guid, Dealer>> GetDomainObjectModifiers()
        {
            List<DomainObjectModifier<Guid, Dealer>> modifiers = new List<DomainObjectModifier<Guid, Dealer>>();
            modifiers.Add((Dealer domainObject) => domainObject.AddBrand(m_GuidUpdateValue));
            modifiers.Add((Dealer domainObject) => domainObject.AddBrand(m_GuidUpdateValue2));
            modifiers.Add((Dealer domainObject) => domainObject.RemoveBrand(m_GuidUpdateValue));
            modifiers.Add((Dealer domainObject) => domainObject.AddBrand(m_GuidUpdateValue3));
            modifiers.Add((Dealer domainObject) => domainObject.RemoveBrand(m_GuidUpdateValue3));
            modifiers.Add((Dealer domainObject) => domainObject.RemoveBrand(m_GuidUpdateValue2));
            modifiers.Add((Dealer domainObject) => domainObject.Name += m_StringUpdateValue);
            modifiers.Add((Dealer domainObject) => domainObject.Name = null);
            modifiers.Add((Dealer domainObject) => domainObject.SetNumberOfVehiclesInStock(m_GuidUpdateValue, m_IntUpdateValue));
            modifiers.Add((Dealer domainObject) => domainObject.SetNumberOfVehiclesInStock(m_GuidUpdateValue2, m_IntUpdateValue2));
            modifiers.Add((Dealer domainObject) => domainObject.RemoveVehicleFromStock(m_GuidUpdateValue));
            modifiers.Add((Dealer domainObject) => domainObject.SetNumberOfVehiclesInStock(m_GuidUpdateValue3, m_IntUpdateValue3));
            modifiers.Add((Dealer domainObject) => domainObject.RemoveVehicleFromStock(m_GuidUpdateValue3));
            modifiers.Add((Dealer domainObject) => domainObject.RemoveVehicleFromStock(m_GuidUpdateValue2));
            return modifiers;
        }

        [Test]
        public override void VerifyDomainObjectFunctionality()
        {
            base.VerifyDomainObjectFunctionality();
        }
    }
}